Дана строка s, в которой выделили подстроку,
состоящую из символов с i-го по j-ый включительно (символы строки s нумеруются с единицы) и поменяли
местами i-ый символ с j-ым, (i + 1)-ый с (j – 1)-ым и
так далее (конвертировали подстроку). Выведите строку s после внесенных изменений.
Вход. В первой строке содержится строка s длиной не более 1000
символов, во второй – два числа i и j (i ≤ j).
Выход. Выведите строку
s после внесенных изменений.
Пример
входа |
Пример
выхода |
gaqipkajibk 5 6 |
gaqikpajibk |
строки
Анализ алгоритма
В задаче следует
обернуть подстроку s[i..j].
Реализация алгоритма
Объявим
символьный массив, в котором храним входную строку.
#define MAX 1010
char s[MAX];
Входную строку
читаем в массив начиная с s[1] (а не с s[0]), так как индексация по условию начинается с единицы.
gets(s+1);
scanf("%d %d",&i,&j);
Обращаем подстроку s[i..j].
while(i < j)
{
ch = s[i]; s[i] = s[j]; s[j] = ch;
i++; j--;
}
Выводим ответ.
puts(s+1);
Реализация алгоритма – с использованием swap
Объявим
символьный массив, в котором храним входную строку.
#define MAX 1010
char s[MAX];
Функция swap меняет местами символы a и b.
void swap(char
&a, char &b)
{
char temp =
a; a = b; b = temp;
}
Входную строку
читаем в массив начиная с s[1] (а не с s[0]), так как индексация по условию начинается с единицы.
gets(s+1);
scanf("%d %d",&i,&j);
Обращаем подстроку s[i..j].
while(i < j)
{
swap(s[i],s[j]);
i++; j--;
}
Выводим ответ.
puts(s+1);
Реализация
алгоритма –
STL reverse
#include <cstdio>
#include <algorithm>
#define MAX 1010
using namespace
std;
char s[MAX];
int i, j;
int main(void)
{
gets(s+1);
scanf("%d
%d",&i,&j);
reverse(s+i,s+j+1);
puts(s+1);
return 0;
}
Java реализация
import java.util.*;
public class Main
{
public static void
main(String[] args)
{
Scanner con = new
Scanner(System.in);
char[] s = con.nextLine().toCharArray();
int i = con.nextInt()
- 1;
int j = con.nextInt()
- 1;
while(i <
j)
{
char temp = s[i]; s[i] = s[j]; s[j] = temp;
i++; j--;
}
String res
= String.valueOf(s);
System.out.println(res);
con.close();
}
}
Python реализация
s = input()
i, j = map(int,input().split())
sub = s[i-1:j]
res = s[:i-1] + sub[::-1] + s[j:]
print(res)